Search K
Appearance
Appearance
数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。
# 挂载目录
docker run -it -v /宿主机目录:/容器目录 镜像名
# 挂载文件
docker run -it -v /宿主机文件:/容器文件 镜像名注意
/ 或 ./ 开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。docker run -it -v mysql:/var/lib/mysql mysql # 挂载数据卷,会被识别为一个数据卷叫 mysql
docker run -it -v ./mysql:/var/lib/mysql mysql # 挂载本地目录,运行时如果不存在会创建目录需求
/root/mysql/data 到容器内的 /var/lib/mysql 目录/root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录(初始化的 SQL 脚本目录)/root/mysql/conf 到容器内的 /etc/mysql/conf.d 目录(这个是 MySQL 配置文件目录)提示
docker run 命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载-v mysql:/var/lib/mysql 会被识别为一个数据卷叫 mysql-v ./mysql:/var/lib/mysql 会被识别为当前目录下的 mysql 目录初始化 SQL 脚本和配置文件在课程资料中。目录:资料 → mysql → conf/init。
hm.cnf 主要是配置了 MySQL 的默认编码,改为 utf8mb4;hmall.sql 则是后面我们要用到的黑马商城项目的初始化 SQL 脚本。❯ tree
.
├── conf
│ └── hm.cnf
└── init
└── hmall.sql
2 directories, 2 files删除原来的 MySQL 容器。
❯ dkrm -f mysql # docker rm -f mysql
mysql创建并运行新 mysql 容器,挂载本地目录。
❯ pwd
/home/ubuntu
❯ ls
mysql/ VSCodeWorking/ hello-world.tar
❯ docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
df03411d0466e307368f25c94eb93ff802379d8f920900194822f58fe97c5477
❯ dkps # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df03411d0466 mysql "docker-entrypoint.s…" 33 seconds ago Up 32 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
a415c4c37209 nginx "/docker-entrypoint.…" 14 hours ago Up 12 hours 0.0.0.0:80->80/tcp, :::80->80/tcp查看 mysql 目录,可以发现 mysql/data 目录已经自动创建好了
❯ lsa mysql
Permissions Size User Date Modified Name
drwxrwxr-x - ubuntu 5 Nov 22:57 conf
drwxr-xr-x - lxd 5 Nov 23:04 data
drwxrwxr-x - ubuntu 5 Nov 22:57 init查看 data 目录,会发现里面有大量数据库数据,说明数据库完成了初始化。
❯ tree mysql -L 2
mysql
├── conf
│ └── hm.cnf
├── data
│ ├── auto.cnf
│ ├── binlog.000001
│ ├── binlog.000002
│ ├── binlog.index
│ ├── ca-key.pem
│ ├── ca.pem
│ ├── client-cert.pem
│ ├── client-key.pem
│ ├── hmall
│ ├── #ib_16384_0.dblwr
│ ├── #ib_16384_1.dblwr
│ ├── ib_buffer_pool
│ ├── ibdata1
│ ├── ibtmp1
│ ├── #innodb_redo
│ ├── #innodb_temp
│ ├── mysql
│ ├── mysql.ibd
│ ├── mysql.sock -> /var/run/mysqld/mysqld.sock
│ ├── performance_schema
│ ├── private_key.pem
│ ├── public_key.pem
│ ├── server-cert.pem
│ ├── server-key.pem
│ ├── sys
│ ├── undo_001
│ └── undo_002
└── init
└── hmall.sql
9 directories, 23 files进入 MySQL 容器,查看 MySQL 编码表。
❯ dex mysql mysql -uroot -p123 # docker exec -it mysql mysql -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like "%char%";
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.2/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.03 sec)发现编码是 utf8mb4 没有问题。
查看数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| hmall |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)切换到 hmall 数据库,查看表。
mysql> use hmall;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_hmall |
+-----------------+
| address |
| cart |
| item |
| order |
| order_detail |
| order_logistics |
| pay_order |
| user |
+-----------------+
8 rows in set (0.00 sec)查看 address 表数据。
mysql> select * from address;
+----+---------+----------+--------+--------------+-------------+--------------------+-----------+------------+-------+
| id | user_id | province | city | town | mobile | street | contact | is_default | notes |
+----+---------+----------+--------+--------------+-------------+--------------------+-----------+------------+-------+
| 59 | 1 | 北京 | 北京 | 朝阳区 | 13900112222 | 金燕龙办公楼 | 李嘉诚 | 0 | NULL |
| 60 | 1 | 北京 | 北京 | 朝阳区 | 13700221122 | 修正大厦 | 李佳红 | 0 | NULL |
| 61 | 1 | 上海 | 上海 | 浦东新区 | 13301212233 | 航头镇航头路 | 李佳星 | 1 | NULL |
| 63 | 1 | 广东 | 佛山 | 永春 | 13301212233 | 永春武馆 | 李小龙 | 0 | NULL |
+----+---------+----------+--------+--------------+-------------+--------------------+-----------+------------+-------+
4 rows in set (0.00 sec)总结
-v 数据卷名:容器内目录 完成挂载docker volume ls: 查看数据卷docker volume rm: 删除数据卷docker volume inspect: 查看数据卷详情docker volume prune: 删除未使用的数据卷